﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Utils.cs" company="Donga CS">
//   2011
// </copyright>
// <summary>
//   The utils.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

using System;
using System.Configuration;
using System.IO;
using System.Text.RegularExpressions;

namespace DONGACS.Common
{
    /// <summary>
    /// The utilities class.
    /// </summary>
    public class Utils
    {
        /// <summary>
        /// Lấy một phần đường dẫn của file upload - phần đường dẫn khác biệt giũa các file
        /// </summary>
        /// <param name="absolutePath">Đường dẫn tuyệt đối của files</param>
        /// <returns></returns>
        public static string GetDifferencePathSegment(string absolutePath)
        {
            //lấy phần đường dẫn chung của file upload, cấu hình trong file web.config
            string commonPathSegment = ConfigurationManager.AppSettings["CommonPathSegment"];

            //lấy vị trí thư mục kết thúc phần chung
            int position = commonPathSegment.IndexOf("UploadFile");

            //lấy phần đường dẫn riêng trong đừong dẫn tuyệt đối của file - từ sau thư mục uploadFile
            string differencePathSegment = absolutePath.Substring(position + "UploadFile".Length, (absolutePath.Length - commonPathSegment.Length));
            return differencePathSegment;
        }
        public static string GetDifferencePathSegmentDanhSachQuaMang(string absolutePath)
        {
            //lấy phần đường dẫn chung của file upload, cấu hình trong file web.config
            string commonPathSegment = ConfigurationManager.AppSettings["CommonPathSegmentDanhSachQuaMang"];

            //lấy vị trí thư mục kết thúc phần chung
            int position = commonPathSegment.IndexOf("UploadFile");

            //lấy phần đường dẫn riêng trong đừong dẫn tuyệt đối của file - từ sau thư mục uploadFile
            try
            {
                string differencePathSegment = absolutePath.Substring(position + "UploadFile".Length, (absolutePath.Length - commonPathSegment.Length));
                return differencePathSegment;
            }
            catch(Exception)
            {
                return "";
            }
        }
        public static string GetKeyUpLoadHinhAnhHoChieu()
        {
            //lấy phần đường dẫn chung của file upload, cấu hình trong file web.config
            string commonPathSegment = ConfigurationManager.AppSettings["HinhAnhHoChieu"];

            //lấy vị trí thư mục kết thúc phần chung
        //    int position = commonPathSegment.IndexOf("UploadFile");

            //lấy phần đường dẫn riêng trong đừong dẫn tuyệt đối của file - từ sau thư mục uploadFile
          //  string differencePathSegment = absolutePath.Substring(position + "UploadFile".Length, (absolutePath.Length - commonPathSegment.Length));
            return commonPathSegment;
        }
        public static string GetKeyUpLoadFileQuaMang()
        {
            //lấy phần đường dẫn chung của file upload, cấu hình trong file web.config
            string commonPathSegment = ConfigurationManager.AppSettings["FileTamQuaMang"];

            //lấy vị trí thư mục kết thúc phần chung
            //    int position = commonPathSegment.IndexOf("UploadFile");

            //lấy phần đường dẫn riêng trong đừong dẫn tuyệt đối của file - từ sau thư mục uploadFile
            //  string differencePathSegment = absolutePath.Substring(position + "UploadFile".Length, (absolutePath.Length - commonPathSegment.Length));
            return commonPathSegment;
        }

        /// <summary>
        /// Đọc file thành một dãy byte
        /// </summary>
        /// <param name="FileName"></param>
        /// <returns></returns>
        public static byte[] GetFileByte(string FileName)
        {
            try
            {
                byte[] byt;
                FileStream fFileOut = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                byt = new byte[fFileOut.Length];
                fFileOut.Read(byt, 0, (int)fFileOut.Length);
                fFileOut.Close();
                fFileOut.Dispose();

                return byt;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// <summary>
        /// Ghi dãy byte ra file
        /// </summary>
        /// <param name="FileName">File được ghi vào</param>
        /// <param name="data">Mảng byte[] ghi vào file</param>
        /// <param name="Length">Số lượng byte sẽ được ghi</param>
        /// <returns></returns>
        public static bool PutFileByte(string FileName, byte[] data, int Length)
        {
            try
            {
                FileStream fFileOut = new FileStream(FileName, FileMode.Create, FileAccess.Write);
                fFileOut.Write(data, 0, Length);

                fFileOut.Close();
                fFileOut.Dispose();
                return true;
            }
            catch (Exception)
            {
                return false;
            }

        }

        /// <summary>
        /// Makes the return string.
        /// </summary>
        /// <param name="urlReferer_">The URL referer_.</param>
        /// <param name="id">The string id.</param>
        /// <returns>The String</returns>
        public static string MakeReturnString(System.Uri uri, string id)
        {
            if (uri == null)
            {
                return "/";
            }
            else
            {
                var urlReferer = uri.ToString();
                var list = urlReferer.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                if (!string.IsNullOrEmpty(id) && list.Length >= 3)
                {
                    if (urlReferer.Contains("List"))
                    {
                        return "/" + list[2] + "/List";
                    }

                    return "/" + list[2] + "/Detail/" + id;
                }

                return "/" + list[2] + "/List";
            }
        }

        /// <summary>
        /// Strips the UL list.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <returns></returns>
        public static string StripULList(string source)
        {
            string output = "";
            try
            {
                source = Regex.Replace(source, @"<br>", string.Empty);
                string patternUL = @"<(ul)>(<li[^>]*>.*?</li>)+?</\1>";
                string trg = Regex.Replace(source, patternUL, (param) =>
                {
                    if (param.Groups[1].Value.Equals("ul"))
                    {
                        foreach (Capture c in param.Groups[2].Captures)
                            output += String.Format("{0} {1}\n", "-", Regex.Replace(c.Value, "<li[^>]*>(.*?)</li>", "$1"));
                    }
                    else
                    {
                        output += String.Format("{0}\n", param.Groups[1].Value);
                    }

                    return output;
                });
                return trg;
            }
            catch
            {
                return source;
            }
        }

        /// <summary>
        /// Calculates the time span.
        /// </summary>
        /// <param name="startTime">The start time.</param>
        /// <param name="endTime">The end time.</param>
        /// <returns>The execution time</returns>
        public static string CalculateTimeSpan(DateTime startTime, DateTime endTime)
        {
            TimeSpan timeSpan = endTime - startTime;

            string totalSecond = timeSpan.TotalSeconds.ToString();
            string second = totalSecond.Split('.')[0];
            string millisecond = string.Empty;
            if (totalSecond.Split('.').Length > 1)
            {
                millisecond = totalSecond.Split('.')[1];
                if (millisecond.Length > 2)
                {
                    millisecond = millisecond.Substring(0, 2);
                }
            }

            return second + "." + (String.IsNullOrEmpty(millisecond) ? "00" : millisecond);
        }

        public static bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        //Convert chuỗi thành chuỗi không dấu
        public static string ConvertToUnSign(string text)
        {

            for (int i = 33; i < 48; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            for (int i = 58; i < 65; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            for (int i = 91; i < 97; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            for (int i = 123; i < 127; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            //text = text.Replace(" ", "-"); //Comment lại để không đưa khoảng trắng thành ký tự -



            Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");



            string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);



            return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');

        }
    }
}